package 文件流.io;

import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * @author 王敬仟
 * 文件输出流
 */
public class Fos {
    //throws Exception 主动向外抛出异常
    public static void main(String[] args) {
        //自动关闭特性
        try (
                FileOutputStream fos=new FileOutputStream("fos.dat");
        ){
            fos.write(1);//write()写入
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*文件输入  把刚刚写入文件的内容读取回来*/
        try (
                FileInputStream fis=new FileInputStream("fos.dat");
        ){
            int p=fis.read();//read()读取
            System.out.println(p);
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*文件复制*/
        try(
                FileInputStream fs=new FileInputStream("./src/main/java/文件流/io/Fos.java");
                FileOutputStream os=new FileOutputStream("ffa.dat");
        ) {
            /*简单读写方式*/
            int a;
            long start=System.currentTimeMillis();//当前时间
            while ((a=fs.read())!=-1){//若不等于-1说明读取到了末尾
                os.write(a);
            }
            long end=System.currentTimeMillis();
            System.out.println("总耗时:"+(end-start)+"ms");
            /*块读写操作更加快速方便省时*/
            byte[] buf=new byte[1024*10];//10kb
            int len;
            long starts=System.currentTimeMillis();
            while ((len=fs.read(buf))!=-1){
                os.write(buf,0,len);//每次读取10kb 从0开始读取 读取整个文件的长度结束
            }
            long ends=System.currentTimeMillis();
            System.out.println("第二次耗时为:"+(ends-starts)+"ms");
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*像文件中写入内容*/
        try (
                //使用输出流  第二个为true是追加模式 就不会删除原有的内容 会自动往后写 但是无间隔 无换行
                FileOutputStream ops=new FileOutputStream("tet.dat",true);
        ){
            //指定写入的内容
            String line="新年快乐,文哥!";
            //指定字符集
            byte[] dayp=line.getBytes(StandardCharsets.UTF_8);
            ops.write(dayp);//写出
            //第二次写出
            line="抱拳了!";
            dayp=line.getBytes(StandardCharsets.UTF_8);
            ops.write(dayp);
        } catch (IOException e) {
            e.printStackTrace();
        }


        /*第二种复制方式 可以自动行刷新*/
        try (
                //"tet.dat"指定文件路径,"UTF-8"指定字符集
             PrintWriter pw=new PrintWriter("tet.dat","UTF-8");
        ){
            //println带有自动行刷新功能
            pw.println("清晨起来,拥抱太阳");
            pw.println("年年有余!岁岁平安!");
            System.out.println("写出完毕!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }


}
